/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package MODELO;

import java.sql.*;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author O2
 */
public class DAOEntidadColumna extends ManejadorBaseDatos implements IDAOPersistencia {
    
    public static int anioModeloReporte=0;
    public DAOEntidadColumna() throws Exception {
        super();
    }

    public DAOEntidadColumna(String driver, String servidor, String url, String usuarioBD, String passwordUsuarioBD, String nombreBD) throws Exception {
        super(driver, servidor, url, usuarioBD, passwordUsuarioBD, nombreBD);
    }

    public DefaultTableModel getTablaColumnas(final int codig_Estrat, final int codig_Pestania, final int column_anio_reporte) {
        DefaultTableModel Tabla = null ;
        try {
            Object[] columNames = getNombresColumnas(codig_Estrat, codig_Pestania, column_anio_reporte);
            conectar();
            int cantColum = contarNombre_Columna(codig_Estrat, codig_Pestania,column_anio_reporte);
            DAOEntidadFila miDAOEntidadFila = new DAOEntidadFila();
            int cantFila = miDAOEntidadFila.contarNombre_Fila(codig_Estrat, codig_Pestania, column_anio_reporte);
            switch (codig_Pestania) {
                case 1: case 16:
                    cantFila = cantFila + 1;
                    break;
                case 2:
                    cantFila = cantFila + 1;
                    break;
                case 3: case 22:
                    cantFila = cantFila + 1;
                    break;
                case 40: case 17: case 31: // aqui modifique pal 2007
                    cantFila = cantFila + 1;
                    break;
                case 41: case 18:
                    cantFila = cantFila + 1;
                    break;
                case 42: case 19:
                    break;
                case 5: case 23: case 32: //aqui pal 2007
                    break;
                case 6: case 20: case 33: //aqui pal 2007
                    break;
                case 7: case 21:
                    cantFila = cantFila + 1;
                    break;
                case 8: case 26:
                    cantFila = cantFila + 1;
                    break;
                case 9: case 35: // aqui pal 2007
                    break;
                case 10: case 27:
                    break;
                case 11: case 24:
                    break;
                case 12: case 25:
                    cantFila = cantFila + 1;
                    break;
                case 13:
                    cantFila = cantFila + 1;
                    break;
                case 30: case 34: case 36:
                    break;
                default: 
                        break;
            }

            Object[][] data = new String[cantFila][cantColum];
            conectar();
            for (int j = 0; j < cantFila; j++) {
                for (int i = 0; i < cantColum; i++) {
                    data[j][i] = "0";
                }
            }
            if (codig_Pestania == 1 || codig_Pestania == 16 || codig_Pestania==30) { //aqui pal 200801 y 2007
                Tabla = new DefaultTableModel(data, columNames) {
                        
                    DAOEntidadFila miDAOEntidadFila = new DAOEntidadFila();
                    int cantFila = miDAOEntidadFila.contarNombre_Fila(codig_Estrat, codig_Pestania,column_anio_reporte);
                    @Override
                    public boolean isCellEditable(int row, int col) {
                        if(anioModeloReporte==200801 || anioModeloReporte==2007){
                            if(row==cantFila){
                                return false;
                            }else{
                                return true;
                            }
                        }else if (row == cantFila || col == 0) {
                            return false;
                        } else {
                            return true;
                        }
                    }
                };
            } else { //bloquea solo totales de horizontales de totas las talbas excepto 1 y 16
                Tabla = new DefaultTableModel(data, columNames) {

                    DAOEntidadFila miDAOEntidadFila = new DAOEntidadFila();
                    int cantFila = miDAOEntidadFila.contarNombre_Fila(codig_Estrat, codig_Pestania,column_anio_reporte);

                    @Override
                    public boolean isCellEditable(int row, int col) {
                        if (row == cantFila) {
                            return false;
                        } else {
                            return true;
                        }
                    }
                };
            }

            Tabla.setDataVector(data, columNames);

        } catch (SQLException e) {
            System.err.println(e.getMessage());
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        desconectar();
        return Tabla;
    }

    public String[] getNombresColumnas(int codig_Estrat, int codig_Pestania, int column_anio_reporte) {
        int i = 0;
        String[] nombresColumns = new String[contarNombre_Columna(codig_Estrat, codig_Pestania, column_anio_reporte)];

        try {
            conectar();
            Connection conn = getConexion();
            CallableStatement proc = conn.prepareCall(" CALL columna_nombre(?,?, ?) ");
            proc.setInt("codigo_Estrat", codig_Estrat);
            proc.setInt("codigo_Pestania", codig_Pestania);
            proc.setInt("anio_reporte", column_anio_reporte);
            ResultSet res = proc.executeQuery();
            while (res.next()) {
                nombresColumns[i] = res.getString("nombre_Columna");
                i++;
            }
            res.close();
        } catch (SQLException e) {
            System.err.println(e.getMessage());
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        desconectar();
        return nombresColumns;
    }

    public int contarNombre_Columna(int codigo_Estrategia, int codigo_Pestania, int anio_Report) {
        int cant = 0;
        Connection conn = getConexion();
        try {
            CallableStatement proc = conn.prepareCall(" CALL columna_contar_nombre(?,?,?) ");
            proc.setInt("codigo_Estrat", codigo_Estrategia);
            proc.setInt("codigo_Pestania", codigo_Pestania);
            proc.setInt("anio_Reporte", anio_Report);
            ResultSet res = proc.executeQuery();
            while (res.next()) {
                cant = Integer.parseInt(res.getString("Total"));
            }
            res.close();

        } catch (SQLException e) {
            System.err.println(e.getMessage());
        }
        desconectar();

        return cant;
    }

    public int getCodigo_columna(String nombre, int estrategia, int pestania, int column_Anio_Reporte) {
        int codigo_columna = 0;
        Connection conn = getConexion();
        try {
            CallableStatement proc = conn.prepareCall(" CALL columna_obtener_cod(?,?,?,?) ");
            proc.setString("nombre", nombre);
            proc.setInt("estrategia", estrategia);
            proc.setInt("pestania", pestania);
            proc.setInt("anio_Reporte", column_Anio_Reporte);
            ResultSet res = proc.executeQuery();
            while (res.next()) {
                codigo_columna = Integer.parseInt(res.getString("codigo_Columna"));
            }
            res.close();
        } catch (SQLException e) {
            System.err.println(e.getMessage());
        }
        desconectar();
        return codigo_columna;
    }

    @Override
    public int insertar(IEntidad objeto) throws Exception {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public int borrar(String condicion) throws Exception {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public int modificar(IEntidad objeto) throws Exception {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}
